#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStandardItemModel>
#include<QMap>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<QTimer>
#include "mylistview.h"
#include "mylrchandle.h"
#include "myslider.h"
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    friend void *send_cmd(void *arg);
    friend void *recv_msg(void* arg);
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    explicit MainWindow(int fd0, char* fifo_name, QWidget *parent = 0); // 获取重定向的标准输出内容
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QStandardItemModel *songLrc; //歌词数据
    QStandardItemModel *songList; //歌曲数据
    QMap<QString, QString> filesMap;//歌名
    QString lrcPath; // 设置歌词路径
    MyListView *myListView;
    pid_t pid; // 记录进程号
    MyLrcHandle *mLrc; // 处理歌词的对象
    QTimer *timer; // 歌词计时器
    void showLrcHead(); // 展示歌词头部
    int runTime; // 记录歌曲运行时间
    int totalTime; // 歌曲总时长
    int lrcTime; // 歌词时间
    int minutes; // 分钟
    int seconds; // 秒钟
    bool flag; // 继续或停止标记
    int currentVolume; // 记录当前音量
    QString currentSongName; // 记录当前歌曲名
    QString currentSongTime; // 获取当前歌曲总时长
    std::list<MyLrc>::iterator currentLrc; // 记录当前歌词
    MySlider *mySlider; //自定义进度控件
    int fd0; // 保存无名管道读取端
    int fi_fd; // 有名管道打开的文件描述符
    bool volumeFlag; // 音量按钮是否按下过标记
    int pictureNum; // 背景图num

    std::list<MyLrc>::iterator findPointFirst(); // 判断当前需要打印的歌词位置
    void printLrc(std::list<MyLrc>::iterator pd); // 打印歌词
    void dragProgress(int value); // 拖拽进度
    void action(); // 暂停 恢复

    virtual void paintEvent(QPaintEvent *event); // 重新绘制背景


public slots:
    void readSongFlies(bool); // 读取歌曲链表
    void getSongName(QString songName); // 获取用户选择的歌曲名
    void showLrc(); // 展示歌词
    void stopRun(); // 暂停或开始
    void volumeSetting(int value); // 设置音量
    void volumeBtn(); // 按下音量按钮静音或者恢复音量
signals:
    void runTimeStopOrStart(); // 停止继续
};

#endif // MAINWINDOW_H
